class_name StatModification
extends Resource

enum ModificationType {
	SET,      # 设置为指定值
	ADD,      # 增加
	MULTIPLY, # 乘法
	PERCENTAGE # 百分比修改
}

@export var stat_name: String  # health, mana, block等
@export var modification_type: ModificationType
@export var value: float
@export var is_temporary: bool = false
@export var duration: int = 0  # 临时修改的持续时间

func apply_to_target(target: Node) -> void:
	print("🔧 StatModification.apply_to_target: 开始应用 %s 修改到 %s" % [stat_name, target.get_class() if target else "null"])
	
	var stats = null
	if target.has_method("get_stats"):
		stats = target.get_stats()
		print("  📊 通过get_stats()方法获取stats")
	elif "stats" in target:
		stats = target.stats
		print("  📊 通过stats属性获取stats")
	else:
		print("  ❌ 无法获取stats")

	if not stats:
		print("  ❌ stats为null")
		return
	
	if not (stat_name in stats):
		print("  ❌ stats中没有 %s 属性" % stat_name)
		print("  📋 stats可用属性: %s" % stats.get_property_list().map(func(p): return p.name))
		return
	
	var current_value = stats.get(stat_name)
	print("  📊 当前 %s 值: %s" % [stat_name, current_value])
	
	var new_value = current_value
	
	match modification_type:
		ModificationType.SET:
			new_value = value
		ModificationType.ADD:
			new_value = current_value + value
		ModificationType.MULTIPLY:
			new_value = current_value * value
		ModificationType.PERCENTAGE:
			new_value = current_value * (1.0 + value / 100.0)
	
	print("  📊 修改后 %s 值: %s" % [stat_name, new_value])
	
	# 使用stats的setter方法
	var setter_method = "set_" + stat_name
	if stats.has_method(setter_method):
		print("  🔧 使用setter方法: %s" % setter_method)
		stats.call(setter_method, int(new_value))
	else:
		print("  🔧 直接设置属性: %s" % stat_name)
		stats.set(stat_name, int(new_value))
	
	# 验证修改是否成功
	var final_value = stats.get(stat_name)
	print("  ✅ 最终 %s 值: %s" % [stat_name, final_value])
	
	# 触发资源变化事件
	Events.resource_changed.emit(target, stat_name, int(current_value), int(new_value))
	print("  📡 已触发resource_changed事件")
